package com.hwg.shiliupro.service;


import com.hwg.shiliupro.dto.LoginDto;
import com.hwg.shiliupro.dto.PageBean;
import com.hwg.shiliupro.dto.ScoreDto;
import com.hwg.shiliupro.dto.UserQueryDto;
import com.hwg.shiliupro.po.R;
import com.hwg.shiliupro.po.User;

import java.util.List;

public interface UserService{
    /**
     * 登录
     *
     * @return {@link User}
     */
    public User login(LoginDto loginDto);


    /**
     * 分页and条件查询
     *
     * @return {@link R}
     */
    public PageBean<User> selectByPageAndCondition(UserQueryDto userQueryDto);


    /**
     * 新增用户
     *
     * @param user 用户
     * @return {@link Boolean}
     */
    public Boolean insertUser(User user);


    /**
     * 删除通过id
     *
     * @param id id
     */
    public Boolean deleteById(Integer id);

    /**
     * 更新用户
     *
     * @param user 用户
     * @return {@link Boolean}
     */
    public Boolean updateUser(User user);


    /**
     * 查找学生通过邮箱
     *
     * @return {@link Boolean}
     */
    public User selectByMail(String mail);

    /**
     * 发送邮件
     *
     * @param user 用户
     * @return {@link Boolean}
     */
    public R sendMail(User user);

    /**
     * 更新密码通过邮件
     *
     * @param protectCode 保护代码
     * @param newPassword 新密码
     * @return {@link Boolean}
     */
    public Boolean updatePasswordByProtectCode(String protectCode, String newPassword);

    /**
     * 通过id查找用户
     *
     * @param id id
     * @return {@link User}
     */
    public User selectById(Integer id);

    /**
     * 拉黑用户通过id
     * @param block block
     * @param id id
     */
    Boolean blockById(Integer id,String block);

    /**
     * 解除黑名单
     *
     * @param id id
     * @return {@link Boolean}
     */
    Boolean freeBlock(Integer id);

    /**
     * 获得被拉黑的用户
     *
     * @return {@link List}<{@link User}>
     */
    List<User> getBlocks();

    /**
     * 判断用户是否进入黑名单
     *
     * @param id id
     * @return boolean
     */
    User isBlock(Integer id);

    /**
     * 获取积分榜信息
     *
     * @return {@link List}<{@link ScoreDto}>
     */
    List<ScoreDto> selectAllScore();
}
